/**
 * Copyright (c) 2013-2022 Nikita Koksharov
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.redisson.client.protocol.decoder;

import java.util.List;

import org.redisson.client.codec.Codec;
import org.redisson.client.handler.State;
import org.redisson.client.protocol.Decoder;


/**
 * 实现了MultiDecoder接口的ObjectDecoder类，用于解码特定类型的对象。
 * 该类的作用是提供一个通用的解码器，通过内部封装一个特定类型的解码器，来实现对多种类型对象的解码支持。
 * @param <T> 解码器特定的类型参数。
 */
public class ObjectDecoder<T> implements MultiDecoder<Object> {

    /**
     * 内部解码器，用于实际的解码工作。
     */
    private final Decoder<T> decoder;

    /**
     * 构造函数，初始化ObjectDecoder实例。
     * @param decoder 具体的解码器实例，用于执行解码操作。
     */
    public ObjectDecoder(Decoder<T> decoder) {
        super();
        this.decoder = decoder;
    }

    /**
     * 根据提供的参数返回一个解码器。
     * 本方法重写了MultiDecoder接口的方法，目的是返回一个泛型转换后的解码器。
     * @param codec 当前的编解码器。
     * @param paramNum 解码器参数的数量。
     * @param state 当前的解码状态。
     * @return 返回一个解码器，用于解码对象。
     */
    @Override
    public Decoder<Object> getDecoder(Codec codec, int paramNum, State state) {
        return (Decoder<Object>) decoder;
    }

    /**
     * 解码提供的部分数据列表。
     * 本方法重写了MultiDecoder接口的方法，但实际上并没有执行解码操作，而是直接返回了输入的数据列表。
     * @param parts 待解码的数据列表。
     * @param state 当前的解码状态。
     * @return 返回解码后的对象，实际上直接返回了输入的列表。
     */
    @Override
    public Object decode(List<Object> parts, State state) {
        return parts;
    }

}
